#ifndef MUSIC_SETTINGS_H
#define MUSIC_SETTINGS_H

#include <QString>

class QTextStream;

/*!
 * Classe pour définir les paramètres de la mélodie
 */
class MusicSettings {

  public:
    enum Mode {
      MAJOR,
      MINOR,
      UNDEFINED_MODE
    };

    enum Scale {
      A,
      B,
      C,
      D,
      E,
      F,
      G,

      AIS,
      CIS,
      DIS,
      FIS,
      GIS,

      AES,
      BES,
      CES,
      DES,
      EES,
      GES,

      UNDEFINED_SCALE
    };

    enum Tempo {
      LARGO = 60,
      LARGHETTO = 66,
      ADAGIO = 76,
      ANDANTE = 108,
      MODERATO = 120,
      ALLEGRO = 168,
      PRESTO = 200,
      PRESTISSIMO = 208
    };

    enum Degree {
      TONIC,
      SUPERTONIC,
      MEDIANT,
      SUBDOMINANT,
      DOMINANT,
      SUBMEDIANT,
      LEADING,
      UNDEFINED_DEGREE
    };

    int scoreSize; // le nombre de notes
    int nbOctave; // le nombre d'octave autorisé
    Tempo tempo; // le tempo (utilisé pour le MIDI)
    Scale scale; // la tonalité
    Mode mode; // le mode
    Degree firstNote; // degré de la première note
    QString pattern; // le motif
    bool conjoint; // notes conjointes
    bool noRepetition; // pas de répétition

    MusicSettings();

    void initialize();

    void write(QTextStream &);
    void read(QTextStream &);

    static QString modeToString(Mode);
    static QString modeToHumanString(Mode);
    static QString scaleToString(Scale);
    static QString scaleToHumanString(Scale);
    static QString tempoToHumanString(Tempo);
    static int degreeToInt(Degree, Mode);
    static QString degreeToHumanString(Degree);
};

#endif
